﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Bukstor.Biz;
using Bukstor.Admin.UI.Utilidades;

namespace Bukstor.Admin.UI
{
    public partial class ABMInventario : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            ((Label)this.Master.FindControl("lblTitulo")).Text = "INVENTARIO";
            if (!Page.IsPostBack)
            {
                ReglasInventario.EjecutarReglasDeActualización();
            }
        }

        protected void btnActualizar_Click(object sender, EventArgs e)
        {
            gvInventario.DataBind();
        }

        public List<InventarioConTitulo> listarInventario(string titulo)
        {
            BukstorBDEntities Entidad = new BukstorBDEntities();
            IEnumerable<Inventario> inventarioMostrar = from Inventario I in Entidad.Inventarios
                                                        where titulo == "" || titulo == null || I.Libro.titulo.Contains(titulo)
                                                        select I;
            List<InventarioConTitulo> inventarioTabla = new List<InventarioConTitulo>();
            foreach (Inventario I in inventarioMostrar)
            {
                I.LibroReference.Load();
                //Creo un inventario con titulos para mostrar y le agrego las propiedades
                InventarioConTitulo nuevoInventario = new InventarioConTitulo();
                nuevoInventario.IdLibro = I.idLibro;
                nuevoInventario.Titulo = I.Libro.titulo;
                nuevoInventario.StockMaximo = I.stockMaximo;
                nuevoInventario.StockMinimo = I.stockMinimo;
                nuevoInventario.Cantidad = I.cantidad;
                nuevoInventario.Precio = I.precioUnitario;
                inventarioTabla.Add(nuevoInventario);
            }
            return inventarioTabla;
        }

        public void actualizarInventario(string IdLibro, string StockMinimo, string StockMaximo, string Cantidad, string Precio)
        {
            int id, min, max, cant;
            decimal precio;
            

            #region Parseo
            id = int.Parse(IdLibro);
            min = int.Parse(StockMinimo);
            max = int.Parse(StockMaximo);
            cant = int.Parse(Cantidad);
            precio = decimal.Parse(Precio);
            #endregion

            BukstorBDEntities entidades = new BukstorBDEntities();
            Inventario I = entidades.Inventarios.First(i => i.idLibro == id);
            I.stockMaximo = max;
            I.stockMinimo = min;
            I.cantidad = cant;
            I.precioUnitario = precio;
            entidades.SaveChanges();
            ReglasInventario.EjecutarReglasDeActualización();            
        }

        public IEnumerable<Alerta> listarAlertas()
        {
            BukstorBDEntities entidades=new BukstorBDEntities();
            IEnumerable<Alerta> substock = from Inventario I in entidades.Inventarios
                                           where I.cantidad < I.stockMinimo
                                           select new Alerta
                                           {
                                               Diferencia = I.cantidad - I.stockMinimo,
                                               Comentario = "Faltante",
                                               StockActual = I.cantidad,
                                               Titulo = I.Libro.titulo
                                           };
            IEnumerable<Alerta> sobrestock = from Inventario I in entidades.Inventarios
                                             where I.cantidad > I.stockMaximo
                                             select new Alerta
                                             {
                                                 Diferencia = I.cantidad - I.stockMaximo,
                                                 Comentario = "Exceso",
                                                 StockActual = I.cantidad,
                                                 Titulo = I.Libro.titulo
                                             };
            List<Alerta> salida = new List<Alerta>(substock.Count() + sobrestock.Count());
            salida.AddRange(substock);
            salida.AddRange(sobrestock);
            return (from Alerta A in salida orderby A.Diferencia select A).ToArray();            
        }

        protected void gvAlertas_DataBound(object sender, EventArgs e)
        {
            foreach (GridViewRow fila in gvAlertas.Rows)
            {
                if (int.Parse(fila.Cells[2].Text) < 0)
                {
                    fila.BackColor = Color.Red;
                    fila.ForeColor = Color.Cyan;
                }
                else
                {
                    fila.BackColor = Color.Blue;
                    fila.ForeColor = Color.Yellow;
                }
            }
        }

        protected void gvInventario_RowUpdated(object sender, GridViewUpdatedEventArgs e)
        {
            gvAlertas.DataBind();
        }
    }
}
